<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>cher2k.f</title>
 <meta name="generator" content="emacs 21.3.1; htmlfontify 0.20">
<style type="text/css"><!-- 
body { background: rgb(255, 255, 255);  color: rgb(0, 0, 0);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: none; }
span.default   { background: rgb(255, 255, 255);  color: rgb(0, 0, 0);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: none; }
span.default a { background: rgb(255, 255, 255);  color: rgb(0, 0, 0);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: underline; }
span.string   { color: rgb(188, 143, 143);  background: rgb(255, 255, 255);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: none; }
span.string a { color: rgb(188, 143, 143);  background: rgb(255, 255, 255);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: underline; }
span.comment   { color: rgb(178, 34, 34);  background: rgb(255, 255, 255);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: none; }
span.comment a { color: rgb(178, 34, 34);  background: rgb(255, 255, 255);  font-style: normal;  font-weight: 500;  font-stretch: normal;  font-family: adobe-courier;  font-size: 11pt;  text-decoration: underline; }
 --></style>

 </head>
  <body>

<pre>
      SUBROUTINE <a name="CHER2K.1"></a><a href="cher2k.f.html#CHER2K.1">CHER2K</a>(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
<span class="comment">*</span><span class="comment">     .. Scalar Arguments ..
</span>      COMPLEX ALPHA
      REAL BETA
      INTEGER K,LDA,LDB,LDC,N
      CHARACTER TRANS,UPLO
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Array Arguments ..
</span>      COMPLEX A(LDA,*),B(LDB,*),C(LDC,*)
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Purpose
</span><span class="comment">*</span><span class="comment">  =======
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  <a name="CHER2K.15"></a><a href="cher2k.f.html#CHER2K.1">CHER2K</a>  performs one of the hermitian rank 2k operations
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     C := alpha*A*conjg( B' ) + conjg( alpha )*B*conjg( A' ) + beta*C,
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  or
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     C := alpha*conjg( A' )*B + conjg( alpha )*conjg( B' )*A + beta*C,
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  where  alpha and beta  are scalars with  beta  real,  C is an  n by n
</span><span class="comment">*</span><span class="comment">  hermitian matrix and  A and B  are  n by k matrices in the first case
</span><span class="comment">*</span><span class="comment">  and  k by n  matrices in the second case.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Arguments
</span><span class="comment">*</span><span class="comment">  ==========
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  UPLO   - CHARACTER*1.
</span><span class="comment">*</span><span class="comment">           On  entry,   UPLO  specifies  whether  the  upper  or  lower
</span><span class="comment">*</span><span class="comment">           triangular  part  of the  array  C  is to be  referenced  as
</span><span class="comment">*</span><span class="comment">           follows:
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              UPLO = 'U' or 'u'   Only the  upper triangular part of  C
</span><span class="comment">*</span><span class="comment">                                  is to be referenced.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              UPLO = 'L' or 'l'   Only the  lower triangular part of  C
</span><span class="comment">*</span><span class="comment">                                  is to be referenced.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  TRANS  - CHARACTER*1.
</span><span class="comment">*</span><span class="comment">           On entry,  TRANS  specifies the operation to be performed as
</span><span class="comment">*</span><span class="comment">           follows:
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              TRANS = 'N' or 'n'    C := alpha*A*conjg( B' )          +
</span><span class="comment">*</span><span class="comment">                                         conjg( alpha )*B*conjg( A' ) +
</span><span class="comment">*</span><span class="comment">                                         beta*C.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">              TRANS = 'C' or 'c'    C := alpha*conjg( A' )*B          +
</span><span class="comment">*</span><span class="comment">                                         conjg( alpha )*conjg( B' )*A +
</span><span class="comment">*</span><span class="comment">                                         beta*C.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  N      - INTEGER.
</span><span class="comment">*</span><span class="comment">           On entry,  N specifies the order of the matrix C.  N must be
</span><span class="comment">*</span><span class="comment">           at least zero.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  K      - INTEGER.
</span><span class="comment">*</span><span class="comment">           On entry with  TRANS = 'N' or 'n',  K  specifies  the number
</span><span class="comment">*</span><span class="comment">           of  columns  of the  matrices  A and B,  and on  entry  with
</span><span class="comment">*</span><span class="comment">           TRANS = 'C' or 'c',  K  specifies  the number of rows of the
</span><span class="comment">*</span><span class="comment">           matrices  A and B.  K must be at least zero.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  ALPHA  - COMPLEX         .
</span><span class="comment">*</span><span class="comment">           On entry, ALPHA specifies the scalar alpha.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  A      - COMPLEX          array of DIMENSION ( LDA, ka ), where ka is
</span><span class="comment">*</span><span class="comment">           k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
</span><span class="comment">*</span><span class="comment">           Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
</span><span class="comment">*</span><span class="comment">           part of the array  A  must contain the matrix  A,  otherwise
</span><span class="comment">*</span><span class="comment">           the leading  k by n  part of the array  A  must contain  the
</span><span class="comment">*</span><span class="comment">           matrix A.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  LDA    - INTEGER.
</span><span class="comment">*</span><span class="comment">           On entry, LDA specifies the first dimension of A as declared
</span><span class="comment">*</span><span class="comment">           in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
</span><span class="comment">*</span><span class="comment">           then  LDA must be at least  max( 1, n ), otherwise  LDA must
</span><span class="comment">*</span><span class="comment">           be at least  max( 1, k ).
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  B      - COMPLEX          array of DIMENSION ( LDB, kb ), where kb is
</span><span class="comment">*</span><span class="comment">           k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
</span><span class="comment">*</span><span class="comment">           Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
</span><span class="comment">*</span><span class="comment">           part of the array  B  must contain the matrix  B,  otherwise
</span><span class="comment">*</span><span class="comment">           the leading  k by n  part of the array  B  must contain  the
</span><span class="comment">*</span><span class="comment">           matrix B.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  LDB    - INTEGER.
</span><span class="comment">*</span><span class="comment">           On entry, LDB specifies the first dimension of B as declared
</span><span class="comment">*</span><span class="comment">           in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
</span><span class="comment">*</span><span class="comment">           then  LDB must be at least  max( 1, n ), otherwise  LDB must
</span><span class="comment">*</span><span class="comment">           be at least  max( 1, k ).
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  BETA   - REAL            .
</span><span class="comment">*</span><span class="comment">           On entry, BETA specifies the scalar beta.
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  C      - COMPLEX          array of DIMENSION ( LDC, n ).
</span><span class="comment">*</span><span class="comment">           Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
</span><span class="comment">*</span><span class="comment">           upper triangular part of the array C must contain the upper
</span><span class="comment">*</span><span class="comment">           triangular part  of the  hermitian matrix  and the strictly
</span><span class="comment">*</span><span class="comment">           lower triangular part of C is not referenced.  On exit, the
</span><span class="comment">*</span><span class="comment">           upper triangular part of the array  C is overwritten by the
</span><span class="comment">*</span><span class="comment">           upper triangular part of the updated matrix.
</span><span class="comment">*</span><span class="comment">           Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
</span><span class="comment">*</span><span class="comment">           lower triangular part of the array C must contain the lower
</span><span class="comment">*</span><span class="comment">           triangular part  of the  hermitian matrix  and the strictly
</span><span class="comment">*</span><span class="comment">           upper triangular part of C is not referenced.  On exit, the
</span><span class="comment">*</span><span class="comment">           lower triangular part of the array  C is overwritten by the
</span><span class="comment">*</span><span class="comment">           lower triangular part of the updated matrix.
</span><span class="comment">*</span><span class="comment">           Note that the imaginary parts of the diagonal elements need
</span><span class="comment">*</span><span class="comment">           not be set,  they are assumed to be zero,  and on exit they
</span><span class="comment">*</span><span class="comment">           are set to zero.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  LDC    - INTEGER.
</span><span class="comment">*</span><span class="comment">           On entry, LDC specifies the first dimension of C as declared
</span><span class="comment">*</span><span class="comment">           in  the  calling  (sub)  program.   LDC  must  be  at  least
</span><span class="comment">*</span><span class="comment">           max( 1, n ).
</span><span class="comment">*</span><span class="comment">           Unchanged on exit.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  Level 3 Blas routine.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  -- Written on 8-February-1989.
</span><span class="comment">*</span><span class="comment">     Jack Dongarra, Argonne National Laboratory.
</span><span class="comment">*</span><span class="comment">     Iain Duff, AERE Harwell.
</span><span class="comment">*</span><span class="comment">     Jeremy Du Croz, Numerical Algorithms Group Ltd.
</span><span class="comment">*</span><span class="comment">     Sven Hammarling, Numerical Algorithms Group Ltd.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">  -- Modified 8-Nov-93 to set C(J,J) to REAL( C(J,J) ) when BETA = 1.
</span><span class="comment">*</span><span class="comment">     Ed Anderson, Cray Research Inc.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     .. External Functions ..
</span>      LOGICAL <a name="LSAME.144"></a><a href="lsame.f.html#LSAME.1">LSAME</a>
      EXTERNAL <a name="LSAME.145"></a><a href="lsame.f.html#LSAME.1">LSAME</a>
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. External Subroutines ..
</span>      EXTERNAL <a name="XERBLA.148"></a><a href="xerbla.f.html#XERBLA.1">XERBLA</a>
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Intrinsic Functions ..
</span>      INTRINSIC CONJG,MAX,REAL
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Local Scalars ..
</span>      COMPLEX TEMP1,TEMP2
      INTEGER I,INFO,J,L,NROWA
      LOGICAL UPPER
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">     .. Parameters ..
</span>      REAL ONE
      PARAMETER (ONE=1.0E+0)
      COMPLEX ZERO
      PARAMETER (ZERO= (0.0E+0,0.0E+0))
<span class="comment">*</span><span class="comment">     ..
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Test the input parameters.
</span><span class="comment">*</span><span class="comment">
</span>      IF (<a name="LSAME.167"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(TRANS,<span class="string">'N'</span>)) THEN
          NROWA = N
      ELSE
          NROWA = K
      END IF
      UPPER = <a name="LSAME.172"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(UPLO,<span class="string">'U'</span>)
<span class="comment">*</span><span class="comment">
</span>      INFO = 0
      IF ((.NOT.UPPER) .AND. (.NOT.<a name="LSAME.175"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(UPLO,<span class="string">'L'</span>))) THEN
          INFO = 1
      ELSE IF ((.NOT.<a name="LSAME.177"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(TRANS,<span class="string">'N'</span>)) .AND.
     +         (.NOT.<a name="LSAME.178"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(TRANS,<span class="string">'C'</span>))) THEN
          INFO = 2
      ELSE IF (N.LT.0) THEN
          INFO = 3
      ELSE IF (K.LT.0) THEN
          INFO = 4
      ELSE IF (LDA.LT.MAX(1,NROWA)) THEN
          INFO = 7
      ELSE IF (LDB.LT.MAX(1,NROWA)) THEN
          INFO = 9
      ELSE IF (LDC.LT.MAX(1,N)) THEN
          INFO = 12
      END IF
      IF (INFO.NE.0) THEN
          CALL <a name="XERBLA.192"></a><a href="xerbla.f.html#XERBLA.1">XERBLA</a>(<span class="string">'<a name="CHER2K.192"></a><a href="cher2k.f.html#CHER2K.1">CHER2K</a>'</span>,INFO)
          RETURN
      END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Quick return if possible.
</span><span class="comment">*</span><span class="comment">
</span>      IF ((N.EQ.0) .OR. (((ALPHA.EQ.ZERO).OR.
     +    (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     And when  alpha.eq.zero.
</span><span class="comment">*</span><span class="comment">
</span>      IF (ALPHA.EQ.ZERO) THEN
          IF (UPPER) THEN
              IF (BETA.EQ.REAL(ZERO)) THEN
                  DO 20 J = 1,N
                      DO 10 I = 1,J
                          C(I,J) = ZERO
   10                 CONTINUE
   20             CONTINUE
              ELSE
                  DO 40 J = 1,N
                      DO 30 I = 1,J - 1
                          C(I,J) = BETA*C(I,J)
   30                 CONTINUE
                      C(J,J) = BETA*REAL(C(J,J))
   40             CONTINUE
              END IF
          ELSE
              IF (BETA.EQ.REAL(ZERO)) THEN
                  DO 60 J = 1,N
                      DO 50 I = J,N
                          C(I,J) = ZERO
   50                 CONTINUE
   60             CONTINUE
              ELSE
                  DO 80 J = 1,N
                      C(J,J) = BETA*REAL(C(J,J))
                      DO 70 I = J + 1,N
                          C(I,J) = BETA*C(I,J)
   70                 CONTINUE
   80             CONTINUE
              END IF
          END IF
          RETURN
      END IF
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     Start the operations.
</span><span class="comment">*</span><span class="comment">
</span>      IF (<a name="LSAME.240"></a><a href="lsame.f.html#LSAME.1">LSAME</a>(TRANS,<span class="string">'N'</span>)) THEN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Form  C := alpha*A*conjg( B' ) + conjg( alpha )*B*conjg( A' ) +
</span><span class="comment">*</span><span class="comment">                   C.
</span><span class="comment">*</span><span class="comment">
</span>          IF (UPPER) THEN
              DO 130 J = 1,N
                  IF (BETA.EQ.REAL(ZERO)) THEN
                      DO 90 I = 1,J
                          C(I,J) = ZERO
   90                 CONTINUE
                  ELSE IF (BETA.NE.ONE) THEN
                      DO 100 I = 1,J - 1
                          C(I,J) = BETA*C(I,J)
  100                 CONTINUE
                      C(J,J) = BETA*REAL(C(J,J))
                  ELSE
                      C(J,J) = REAL(C(J,J))
                  END IF
                  DO 120 L = 1,K
                      IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN
                          TEMP1 = ALPHA*CONJG(B(J,L))
                          TEMP2 = CONJG(ALPHA*A(J,L))
                          DO 110 I = 1,J - 1
                              C(I,J) = C(I,J) + A(I,L)*TEMP1 +
     +                                 B(I,L)*TEMP2
  110                     CONTINUE
                          C(J,J) = REAL(C(J,J)) +
     +                             REAL(A(J,L)*TEMP1+B(J,L)*TEMP2)
                      END IF
  120             CONTINUE
  130         CONTINUE
          ELSE
              DO 180 J = 1,N
                  IF (BETA.EQ.REAL(ZERO)) THEN
                      DO 140 I = J,N
                          C(I,J) = ZERO
  140                 CONTINUE
                  ELSE IF (BETA.NE.ONE) THEN
                      DO 150 I = J + 1,N
                          C(I,J) = BETA*C(I,J)
  150                 CONTINUE
                      C(J,J) = BETA*REAL(C(J,J))
                  ELSE
                      C(J,J) = REAL(C(J,J))
                  END IF
                  DO 170 L = 1,K
                      IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN
                          TEMP1 = ALPHA*CONJG(B(J,L))
                          TEMP2 = CONJG(ALPHA*A(J,L))
                          DO 160 I = J + 1,N
                              C(I,J) = C(I,J) + A(I,L)*TEMP1 +
     +                                 B(I,L)*TEMP2
  160                     CONTINUE
                          C(J,J) = REAL(C(J,J)) +
     +                             REAL(A(J,L)*TEMP1+B(J,L)*TEMP2)
                      END IF
  170             CONTINUE
  180         CONTINUE
          END IF
      ELSE
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">        Form  C := alpha*conjg( A' )*B + conjg( alpha )*conjg( B' )*A +
</span><span class="comment">*</span><span class="comment">                   C.
</span><span class="comment">*</span><span class="comment">
</span>          IF (UPPER) THEN
              DO 210 J = 1,N
                  DO 200 I = 1,J
                      TEMP1 = ZERO
                      TEMP2 = ZERO
                      DO 190 L = 1,K
                          TEMP1 = TEMP1 + CONJG(A(L,I))*B(L,J)
                          TEMP2 = TEMP2 + CONJG(B(L,I))*A(L,J)
  190                 CONTINUE
                      IF (I.EQ.J) THEN
                          IF (BETA.EQ.REAL(ZERO)) THEN
                              C(J,J) = REAL(ALPHA*TEMP1+
     +                                 CONJG(ALPHA)*TEMP2)
                          ELSE
                              C(J,J) = BETA*REAL(C(J,J)) +
     +                                 REAL(ALPHA*TEMP1+
     +                                 CONJG(ALPHA)*TEMP2)
                          END IF
                      ELSE
                          IF (BETA.EQ.REAL(ZERO)) THEN
                              C(I,J) = ALPHA*TEMP1 + CONJG(ALPHA)*TEMP2
                          ELSE
                              C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 +
     +                                 CONJG(ALPHA)*TEMP2
                          END IF
                      END IF
  200             CONTINUE
  210         CONTINUE
          ELSE
              DO 240 J = 1,N
                  DO 230 I = J,N
                      TEMP1 = ZERO
                      TEMP2 = ZERO
                      DO 220 L = 1,K
                          TEMP1 = TEMP1 + CONJG(A(L,I))*B(L,J)
                          TEMP2 = TEMP2 + CONJG(B(L,I))*A(L,J)
  220                 CONTINUE
                      IF (I.EQ.J) THEN
                          IF (BETA.EQ.REAL(ZERO)) THEN
                              C(J,J) = REAL(ALPHA*TEMP1+
     +                                 CONJG(ALPHA)*TEMP2)
                          ELSE
                              C(J,J) = BETA*REAL(C(J,J)) +
     +                                 REAL(ALPHA*TEMP1+
     +                                 CONJG(ALPHA)*TEMP2)
                          END IF
                      ELSE
                          IF (BETA.EQ.REAL(ZERO)) THEN
                              C(I,J) = ALPHA*TEMP1 + CONJG(ALPHA)*TEMP2
                          ELSE
                              C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 +
     +                                 CONJG(ALPHA)*TEMP2
                          END IF
                      END IF
  230             CONTINUE
  240         CONTINUE
          END IF
      END IF
<span class="comment">*</span><span class="comment">
</span>      RETURN
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment">     End of <a name="CHER2K.366"></a><a href="cher2k.f.html#CHER2K.1">CHER2K</a>.
</span><span class="comment">*</span><span class="comment">
</span>      END

</pre>

 </body>
</html>
